##统计字典中键的访问次数-----
class CountList:
    def __init__(self, *args):
        self.values = [x for x in args]#列表推导式，先执行x in range args,获得每一个x，然后将这些x放入一个叫self.values 的列表中...
        self.count = {}.fromkeys(range(len(self.values)), 0) #fromkeys初始化字典函数，将self.values中的每一个数的 键值都初始化为0

    def __len__(self):
        return len(self.values)

    def __getitem__(self, key):
        self.count[key] += 1
        return self.values[key]

##要求1：实现获取、设置和删除一个元素的行为（删除一个元素的时候对应的计数器也会被删除)
##要求2：增加 counter(index) 方法，返回 index 参数所指定的元素记录的访问次数
##要求3：实现 append()、pop()、remove()、insert()、clear() 和 reverse() 方法（重写这些方法的时候注意考虑计数器的对应改变）
class CountList(list):
    def __init__(self, *args):
        super().__init__(args)
        self.count = []
        for i in args:
            self.count.append(0)

    def __len__(self):
        return len(self.count)

    def __getitem__(self, key):
        self.count[key] += 1
        return super().__getitem__(key)

    def __setitem__(self, key, value):
        self.count[key] += 1
        super().__setitem__(key, value)

    def __delitem__(self, key):
        del self.count[key]
        super().__delitem__(key)

    def counter(self, key):
        return self.count[key]

    def append(self, value):
        self.count.append(0)
        super().append(value)

    def pop(self, key=-1):
        del self.count[key]
        return super().pop(key)

    def remove(self, value):
        key = super().index(value)
        del self.count[key]
        super().remove(value)

    def insert(self, key, value):
        self.count.insert(key, 0)
        super().insert(key, value)

    def clear(self):
        self.count.clear()
        super().clear()

    def reverse(self):
        self.count.reverse()
        super().reverse()
